package com.suoluo.zenadmin.service.hotel;

import java.util.List;
import java.util.Map;

import net.paoding.rose.web.annotation.Param;

import com.suoluo.zenadmin.service.crawler.bean.HotelReviewBean;
import com.suoluo.zenadmin.vo.BaseInfoVO;
import com.suoluo.zenadmin.vo.ImageVO;
import com.suoluo.zenadmin.vo.PageVO;
import com.suoluo.zenadmin.vo.hotel.Hotel2VO;
import com.suoluo.zenadmin.vo.hotel.HotelHomeVO;
import com.suoluo.zenadmin.vo.hotel.HotelResource2VO;
import com.suoluo.zenadmin.vo.hotel.HotelReviewRecordVO;
import com.suoluo.zenadmin.vo.hotel.HotelReviewVO;
import com.suoluo.zenadmin.vo.hotel.HotelServicesCategoryVO;
import com.suoluo.zenadmin.vo.hotel.HotelStyleVO;

public interface HotelService {

	/**
	 * 查询酒店的服务列表
	 * @return
	 */
	public List<HotelServicesCategoryVO> findListHotelServiceCategory();
	/**
	 * 保存酒店的基础服务类别信息
	 * @param serviceVO
	 */
	public void saveServiceCategory(HotelServicesCategoryVO serviceVO);
	/**
	 * 根据Id查询酒店服务
	 * @param serviceId
	 * @return
	 */
	public HotelServicesCategoryVO findServiceCategoryById(int serviceId);
	/**
	 * 更新酒店的基础服务信息
	 * @param serviceVO
	 */
	public void updateHotelServiceCategory(HotelServicesCategoryVO serviceVO);
	/**
	 * 删除酒店服务图标
	 * @param serviceVO
	 */
	public void deleteServiceCategory(HotelServicesCategoryVO serviceVO);
	/**
	 * 查询所有的酒店风格信息
	 * @return
	 */
	public List<HotelStyleVO> findListHotelStyle();
	/**
	 * 保存酒店风格信息
	 * @param stylePOJO
	 */
	public void saveHotelStyle(HotelStyleVO stylePOJO);
	/**
	 * 查询酒店风格
	 * @param styleId
	 * @return
	 */
	public HotelStyleVO findHotelStyleById(int styleId);
	/**
	 * 更新酒店风格信息
	 * @param stylePOJO
	 */
	public void updateHotelStyle(HotelStyleVO stylePOJO);
	/**
	 * 删除酒店风格信息
	 * @param styleId
	 */
	public void deleteHotelStyle(int styleId);
	/**
	 * 查询指定目的地下的酒店
	 * @param page
	 * @param destId
	 * @return
	 */
	public List<Hotel2VO> findListHotelByDestId(PageVO page,int destId);
	/**
	 * 查询指定目的地下的酒店总记录数
	 * @param destId
	 * @return
	 */
	public int findHotelCountByDestId(int destId);
	/**
	 * 保存酒店基础信息
	 * @param invo
	 * @param hotelVO
	 * @return
	 */
	public void saveHotel(Hotel2VO hotelVO);
	
	public Hotel2VO findSimplestHotelById(int hotelId);
	
	public Hotel2VO findHotelById(int hotelId);
	
	/**
	 * 更新酒店信息
	 * @param hotelVO
	 */
	public void updateHotel(Hotel2VO hotelVO);
	/**
	 * 删除酒店信息
	 * @param hotelId
	 */
	public void deleteHotel(Hotel2VO hotelVO);
	/**
	 * 查询酒店关联的服务信息
	 * @param hotelId
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findListHotelAndServices(int hotelId);
	/**
	 * 更新酒店关联的服务信息
	 * @param hotelVO
	 */
	public void updateHotelAndService(Hotel2VO hotelVO);
	
	/**
	 * 查询酒店关联的风格信息
	 * @param hotelId
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List<Map> findListHotelAndStyles(int hotelId);
	/**
	 * 更新酒店关联的风格信息
	 * @param hotelVo
	 */
	public void updateHotelAndStryles(Hotel2VO hotelVO);
	/**
	 * 查询酒店的所有资源信息
	 * @param hotelId
	 * @return
	 */
	public List<HotelResource2VO> findHotelResourcesWithoutContentByHotelId(int hotelId);
	/**
	 * 保存酒店资源信息
	 */
	public void saveHotelResource(HotelResource2VO hotellog);
	/**
	 * 根据Id查询酒店资源信息
	 * @param resourceId
	 * @return
	 */
	public HotelResource2VO findHotelResourceById(int resourceId);
	
	/**
	 * 根据资源编号查询最简洁的酒店资源
	 * @param resourceId
	 * @return
	 */
	public HotelResource2VO findSimplestHotelResourceById(int resourceId);
	/**
	 * 更新酒店资源信息
	 * @param resource
	 */
	public void updateHotelResource(HotelResource2VO resource);
	/**
	 * 删除酒店资源项
	 * @param resource
	 */
	public void deleteHotelResource(HotelResource2VO resource);
	
//	/**
//	 * 保存勾选的默认小图片
//	 * @param resourceId
//	 * @param resourceImg
//	 */
//	public void savePickDefaultImg(int resourceId,int imageId);
//	/**
//	 * 查询酒店的资源项集合
//	 * @param resourceId
//	 * @return
//	 */
//	public List<HotelResourceItemPOJO> findListHotelResourceItem(int resourceId);
	/**
	 * 保存酒店资源项信息
	 * @param resourceItem
	 */
	public void saveHotelResourceItem(HotelResource2VO resourceItem);
	/**
	 * 删除酒店资源项信息
	 * @param preffix
	 * @param resourceItemImg
	 * @param resourceId
	 */
	public void deleteHotelResourceItem(ImageVO image);
	/**
	 * 查询酒店评论统计信息
	 * @param hotelId
	 * @return
	 */
	public List<HotelReviewVO> findListHotelReview(int hotelId); 
	/**
	 * 保存酒店评论统计信息
	 * @param review
	 */
	public void saveHotelReview(HotelReviewVO review);
	/**
	 * 根据Id查询酒店的评论统计信息
	 * @param reviewId
	 * @return
	 */
	public HotelReviewVO findHotelReviewById(int reviewId);
	/**
	 * 修改酒店评论统计信息
	 * @param review
	 */
	public void updateHotelReview(HotelReviewVO review);
	/**
	 * 删除酒店评论信息，包括统计信息
	 * @param reviewId
	 */
	public void deleteHotelReview(@Param("reviewId")int reviewId);
	/**
	 * 查询具体的5条评论信息
	 * @param reviewId
	 * @return
	 */
	public List<HotelReviewRecordVO> findListHotelReviewRecord(int reviewId);
	
	/**
	 * 根据状态查询酒店评论记录
	 * @param crawlerStatus
	 * @return
	 */
	public List<HotelReviewVO> findInterruptReview(int crawlerStatus);
	/**
	 * 查询抓取时间超过一周的评论
	 * @param holdDays
	 * @return
	 */
	public List<HotelReviewVO> findExpireReview(int holdDays);
	/**
	 * 更新评论抓取状态
	 * @param status
	 * @param reviewId
	 */
	public void updateCrawlerState(int status,int reviewId);
	
	/**
	 * 评论抓取失败后，更新失败记录总次数，状态更新为失败
	 * @param reviewId
	 */
	public void updateIncrementFailCountAndSetFail(int status,int reviewId);
	/**
	 * 酒店评论抓取成功后，更新酒店信息评论统计表
	 * @param reviewPOJO
	 */
	public void updateCrawlerReviewInfo(HotelReviewBean review);
	
	/**
	 * 查询目的地下的所有酒店信息
	 * @param destId 目的地编号
	 * @return
	 */
	public List<Hotel2VO> findHotelsWithoutContentByDestId(int destId);
	
	/**
	 * 查询酒店主页的数据
	 * @param hotelId 酒店编号
	 * @return
	 */
	public HotelHomeVO findHotelHomeData(int hotelId);
	
	/**
	 * 查询酒店的资源
	 * @param hotelId 酒店编号
	 * @param resourceType 资源类型
	 * @return
	 */
	public List<HotelResource2VO> findHotelResourcesWithoutContentByHotelId(int hotelId,int resourceType);
	
	/**
	 * 查询酒店的资源和资源下的图片项
	 * @param resourceId 资源编号
	 * @return
	 */
	public HotelResource2VO findHotelResourceAndItems(HotelResource2VO resource);
	
//	public HotelAroundVO findHotelAroundData(int hotelId,int destId,int categoryId);
	/**
	 * 更新酒店资源的默认图片
	 * @param resourceId
	 * @param imageId
	 */
	public void updateDefaultImage(int resourceId,int imageId);
	
	/**
	 * 获取最新的节点类表
	 * @param curPage 分页参数
	 * @return
	 */
	public List<Hotel2VO> findNewHotels(int curPage);
	
	/**
	 * 查询最热的酒店
	 * @param curPage
	 * @return
	 */
	public List<Hotel2VO> findHotHotels(int curPage);

	/**
	 * 保存酒店图文信息
	 * @param info
	 */
	public void saveHotelText(BaseInfoVO info);
	/**
	 * 保存简化版酒店的多图
	 * @param info
	 */
	public void saveHotelImage(BaseInfoVO info);
	
	/**
	 * 查询简化版酒店的基础信息和对应的图片信息
	 * @param hotelId
	 * @return
	 */
	public List<BaseInfoVO> findHotelInfoAndImages(int hotelId);
	
	/**
	 * 查询目的地下所有酒店
	 * @param destId
	 * @return
	 */
	public List<Hotel2VO> findAllHotel(int destId);
	
	/**
	 * 查询酒店风格信息
	 * @param hotelId
	 * @return
	 */
	public String findHotelStyle(int hotelId);
	/**
	 * 目的地app查询酒店资源信息，包括概述和默认图片
	 * @param hotelId
	 * @param resourceType
	 * @return
	 */
	public List<HotelResource2VO> findHotelResources(int hotelId);
}
